package com.javaclimb.music.controller;

import com.alibaba.fastjson.JSONObject;
import com.javaclimb.music.domain.Consumer;
import com.javaclimb.music.service.ConsumerService;
import com.javaclimb.music.utils.Consts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 用户控制类
 * */
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    private ConsumerService consumerService;

    /**
     * 添加前端用户
     * */
    @PostMapping("/add")
    public Object addConsumer(Consumer consumer){
        System.out.println(consumer);
        JSONObject jsonObject = new JSONObject();

        if(consumer.getUsername() == null || consumer.getUsername().equals("")){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "用户名不能为空");
            return jsonObject;
        }
        if(consumer.getPassword() == null || consumer.getPassword().equals("")){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "密码不能为空");
            return jsonObject;
        }
        Consumer consumer1 = consumerService.getByUsername(consumer.getUsername());
        if(consumer1 != null){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "用户名已存在");
            return jsonObject;
        }
        boolean flag = consumerService.insert(consumer);
        if(flag){
            jsonObject.put(Consts.CODE, 1);
            jsonObject.put(Consts.MSG, "添加成功");
            return jsonObject;
        }
        jsonObject.put(Consts.CODE, 0);
        jsonObject.put(Consts.MSG, "添加失败");
        return jsonObject;
    }

    /**
     * 修改前端用户
     * */
    @PostMapping("/update")
    public Object updateConsumer(Consumer consumer){
        JSONObject jsonObject = new JSONObject();
        if(consumer.getUsername() == null || consumer.getUsername().equals("")){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "用户名不能为空");
            return jsonObject;
        }
        if(consumer.getPassword() == null || consumer.getPassword().equals("")){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "密码不能为空");
            return jsonObject;
        }
        boolean flag = consumerService.update(consumer);
        if(flag){
            jsonObject.put(Consts.CODE, 1);
            jsonObject.put(Consts.MSG, "修改成功");
            return jsonObject;
        }
        jsonObject.put(Consts.CODE, 0);
        jsonObject.put(Consts.MSG, "修改失败");
        return jsonObject;
    }

    /**
     * 删除用户
     * */
    @GetMapping("/delete")
    public Object deleteConsumer(Integer id){
        //return consumer;
        boolean flag = consumerService.delete(id);
        return flag;
    }

    /**
     * 根据主键查询整个对象
     * */
    @GetMapping("/selectByPrimaryKey")
    public Object selectByPrimaryKey(Integer id){
        //return consumer;
        return consumerService.selectByPrimaryKey(id);
    }

    /**
     * 查询所有用户
     * */
    @GetMapping("/allConsumer")
    public Object selectAllConsumer(){
        //return consumer;
        return consumerService.allConsumer();
    }

    /**
     * 根据用户名字模糊查询
     * */
    @GetMapping("/consumerOfName")
    public Object consumerOfName(String userName){
        return consumerService.consumerOfName("%" + userName + "%");
    }

    /**
     * 根据性别查询
     * */
    @GetMapping("/consumerOfSex")
    public Object consumerOfSex(Integer sex){
        return consumerService.consumerOfSex(sex);
    }

    /**
     * 更新用户图片
     * */
    @PostMapping("/updateConsumerPic")
    public Object updateConsumerPic(@RequestParam("file") MultipartFile avatorFile, @RequestParam("id") Integer id){
        JSONObject jsonObject = new JSONObject();
        if(avatorFile.isEmpty()){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败");
            return jsonObject;
        }
        //文件名 = 当前时间到毫秒 + 原来的文件名
        String fileName = System.currentTimeMillis() + avatorFile.getOriginalFilename();
        //文件路径
        String filePath = System.getProperty("user.dir") + System.getProperty("file.separator")
                + "avatorImages";
        //如果文件路径不存在，新增该路径
        File file = new File(filePath);
        if(!file.exists()){
            file.mkdirs();
        }
        //实际的文件地址
        File dest = new File(filePath + System.getProperty("file.separator")  + fileName);
        //存储到数据库里的相对文件地址
        String storeAvatorPath = "/avatorImages/" + fileName;
        try {
            avatorFile.transferTo(dest);
            Consumer consumer = new Consumer();
            consumer.setId(id);
            consumer.setAvator(storeAvatorPath);
            boolean flag = consumerService.update(consumer);
            if(flag){
                jsonObject.put(Consts.CODE, 1);
                jsonObject.put(Consts.MSG, "上传成功");
                jsonObject.put("userAvator", storeAvatorPath);
                return jsonObject;
            }
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败");
            return jsonObject;
        } catch (IOException e) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "文件上传失败" + e.getMessage());
        }finally {
            return jsonObject;
        }
    }

    /**
     * 前端用户登录
     * */
    @PostMapping("/login")
    public Object login(Consumer consumer){
        System.out.println(consumer);
        JSONObject jsonObject = new JSONObject();

        if(consumer.getUsername() == null || consumer.getUsername().equals("")){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "用户名不能为空");
            return jsonObject;
        }
        if(consumer.getPassword() == null || consumer.getPassword().equals("")){
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "密码不能为空");
            return jsonObject;
        }
        boolean flag = consumerService.verifyPassword(consumer);
        if(flag){
            jsonObject.put(Consts.CODE, 1);
            jsonObject.put(Consts.MSG, "登录成功");
            jsonObject.put("userMsg", consumerService.getByUsername(consumer.getUsername()));
            return jsonObject;
        }
        jsonObject.put(Consts.CODE, 0);
        jsonObject.put(Consts.MSG, "用户名或密码错误");
        return jsonObject;
    }
}
